package com.cy.pj.common.pool;

import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * @Lazy 描述对象类型时表示延迟对象的加载，类的配置信息先读入内存，实例何时需要何时创建。
 * 一般在占用资源比较多的对象短时间又不会用的时候
 * @Scope 与 @Lazy 一般会结合使用
 */
@Component
@Scope("singleton")
@Lazy
public class ObjectPool {
    public ObjectPool(){
        System.out.println("构造方法");
    }
    //生命周期方法：一般在池对象的设计中会有这样的方法
    //@PostConstruct 描述的方法为生命周期初始化方法，在构造方法执行后执行
    @PostConstruct
    public void init(){
        System.out.println("init");
    }
    //@PreDestroy 描述的方法为生命周期销毁方法，在对象销毁前执行
    //在prototype的对象中不会执行(多例对象spring不负责销毁)
    @PreDestroy
    public void destroy(){
        System.out.println("destroy");
    }
}
